﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClearDir
{
    public class AutoDelet
    {
        /// <summary>
        /// 应用自删除
        /// </summary>
        public static void deletItself()
        {
            try
            {
                string curExe = System.Windows.Forms.Application.ExecutablePath;

                string tmpName = AppDomain.CurrentDomain.BaseDirectory + "$";
                string name1 = "$";
                while (File.Exists(tmpName))
                {
                    tmpName = tmpName + "$";
                    name1 = name1 + "$";
                }
                File.Move(curExe, tmpName); // 重命名当前文件

                string vbsName = AppDomain.CurrentDomain.BaseDirectory + "$";
                string name2 = "$";
                while (File.Exists(vbsName + ".vbs"))
                {
                    vbsName = vbsName + "$";
                    name2 = name2 + "$";
                }

                //Set ws = CreateObject("Wscript.Shell") 
                //WScript.sleep 5000
                //ws.run "cmd /c ?> $",vbhide
                //ws.run "cmd /c del $",vbhide
                //ws.run "cmd /c ?> $.vbs",vbhide
                //ws.run "cmd /c del $.vbs",vbhide

                StringBuilder Str = new StringBuilder();
                Str.AppendLine("Set ws = CreateObject(\"Wscript.Shell\")");
                Str.AppendLine("WScript.sleep 4000");
                Str.AppendLine("ws.run \"cmd /c ?> " + name1 + "\",vbhide");
                Str.AppendLine("ws.run \"cmd /c del " + name1 + "\",vbhide");
                Str.AppendLine("ws.run \"cmd /c ?> " + name2 + ".vbs\",vbhide");
                Str.AppendLine("ws.run \"cmd /c del " + name2 + ".vbs\",vbhide");
                string data = Str.ToString();

                SaveFile(data, vbsName + ".vbs");
                System.Diagnostics.Process.Start(vbsName + ".vbs");

                System.Environment.Exit(0); //退出
            }
            catch(Exception){}
        }

        /// <summary>  
        /// 保存数据data到文件处理过程，返回值为保存的文件名  
        /// </summary>  
        private static String SaveFile(String data, String filePath)
        {
            System.IO.StreamWriter file1 = new System.IO.StreamWriter(filePath, false, Encoding.Default);     //文件已覆盖方式添加内容  

            file1.Write(data);                                                              //保存数据到文件  

            file1.Close();                                                                  //关闭文件  
            file1.Dispose();                                                                //释放对象  

            return filePath;
        }
    }

}
